# Design and implement a data structure for a compressed string iterator.
# It should support the following operations: next and hasNext.
#
# The given compressed string will be in the form of each letter followed
# by a positive integer representing the number of this letter existing in
# the original uncompressed string.
#
# next() - if the original string still has uncompressed characters, return
# the next letter; Otherwise return a white space.
# hasNext() - Judge whether there is any letter needs to be uncompressed.
#
# Note:
# Please remember to RESET your class variables declared in StringIterator,
# as static/class variables are persisted across multiple test cases. Please see here for more details.
#
# Example:
#
# StringIterator iterator = new StringIterator("L1e2t1C1o1d1e1");
#
# iterator.next(); // return 'L'
# iterator.next(); // return 'e'
# iterator.next(); // return 'e'
# iterator.next(); // return 't'
# iterator.next(); // return 'C'
# iterator.next(); // return 'o'
# iterator.next(); // return 'd'
# iterator.hasNext(); // return true
# iterator.next(); // return 'e'
# iterator.hasNext(); // return false
# iterator.next(); // return ' '


class StringIterator:

    def __init__(self, compressedString):
        self.s = compressedString
        self.ptr = 0
        self.num = 0
        self.len = len(compressedString)
        self.char = ""

    def next(self):
        if not self.hasNext():
            return ' '
        if self.num == 0:
            self.char = self.s[self.ptr]
            self.ptr = self.ptr + 1
            arr = []
            while self.ptr < self.len and self.s[self.ptr].isdigit():
                arr.append(self.s[self.ptr])
                self.ptr += 1
            arr = "".join(arr)
            self.num = int(arr) - 1
            return self.char
        else:
            self.num -= 1
            return self.char

    def hasNext(self):
        if self.ptr >= self.len and self.num == 0:
            return False
        return True

# Your StringIterator object will be instantiated and called as such:
# obj = StringIterator(compressedString)
# param_1 = obj.next()
# param_2 = obj.hasNext()
